package com.moss.common.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.moss.common.constant.Constants;

import java.util.Date;
import java.util.Map;

public class JwtUtil {


        // 用于JWT进行签名加密的秘钥
        private static final String SECRET = "gxcc3_jwt_zhangsanlisi";

        /**
         * @Param: 传入需要设置的payload信息
         * @return: 返回token
         */
        public static String generateToken(Map<String, String> map) {

            // 当前时间戳加上设定的毫秒数（1秒 == 1000毫秒）
            Date expiration = new Date(System.currentTimeMillis() + Constants.TOKEN_EXPIRATION * 1000);

            JWTCreator.Builder builder = JWT.create();

            // 将map内的信息传入JWT的payload中
            map.forEach(builder::withClaim);
            builder.withExpiresAt(expiration);

            // 设置签名并返回token
            return builder.sign(Algorithm.HMAC256(SECRET));
        }

        /**
         * @Param: 传入token
         * @return:
         */
        public static void verify(String token) {
            JWT.require(Algorithm.HMAC256(SECRET)).build().verify(token);
        }

        /**
         * @Param: 传入token
         * @return: 解密的token信息
         */
        public static DecodedJWT getTokenInfo(String token) {
            return JWT.require(Algorithm.HMAC256(SECRET)).build().verify(token);
        }

}
